package com.administrator.cloudapplication.fragments;

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.administrator.cloudapplication.R;
import com.administrator.cloudapplication.adapter.NewsAdapter;
import com.administrator.cloudapplication.base.BaseFragment;
import com.administrator.cloudapplication.callback.ReqCallBack;
import com.administrator.cloudapplication.constant.Urls;
import com.administrator.cloudapplication.models.NewTestModel;
import com.administrator.cloudapplication.tools.GsonUtils;
import com.administrator.cloudapplication.tools.HttpUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 程序的第一个页面，显示新闻资讯。
 * 本页面由一个Tablayout和一个ViewPager绑定而成，ViewPager由一个另外的
 * Fragment（NewsFragment）循环而成六个页面。
 */

public class InfomationFragment extends BaseFragment implements ReqCallBack {
    TabLayout mTabLayout;
    ViewPager mViewPager;
    View mView;
    ArrayList<NewTestModel.DataBean.CateListBean> mListType = new ArrayList<>();//新闻类的接收对象
    List<Fragment> mFragmentList = new ArrayList<>();//当前页面的六个Fragment页面
    NewsAdapter mNewsAdapter;//使用适配器来将六个页面加载给当前页面

    public View initView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        mView = inflater.inflate(R.layout.fragment_infomation, container, false);
        mTabLayout = (TabLayout) mView.findViewById(R.id.tab_info);
        mViewPager = (ViewPager) mView.findViewById(R.id.vp_info);
        //将数据传给适配器，生成一个带数据的适配器
        mNewsAdapter = new NewsAdapter(getChildFragmentManager(), mListType, mFragmentList);
        //利用适配器将数据传给ViewPager
        mViewPager.setAdapter(mNewsAdapter);
        mViewPager.setCurrentItem(0);//设置ViewPager默认为第一页
        mViewPager.setOffscreenPageLimit(2);//设置ViewPager默认只加载两个页面
        mTabLayout.setupWithViewPager(mViewPager);//将ViewPager与TabLayout绑定起来
        return mView;//返回当前视图
    }

    /**
     * 利用setUserVisibleHint的方法实现懒加载，防止ViewPager一次加载过多页面
     */
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (getUserVisibleHint()) {
            isVisible = true;
            lazyLoad();
        } else {
            isVisible = false;
            onInvisible();
        }
    }

    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    protected void initPrepare() {

    }

    @Override
    protected void onInvisible() {


    }

    @Override
    protected void initData() {
        requestWeb();
    }

    //网络请求
    private void requestWeb() {
        //显示网络请求的Dialog旋转图标
        showLoading();
        //获取新闻分类接口，无需传参数
        HttpUtils.getInstance(getActivity()).requestAsyn(Urls.NEWS_TYPE, HttpUtils.TYPE_POST_JSON, null, this, 0);
    }

    //网络请求成功的方法，在这里写获取到数据以后要做的操作
    @Override
    public void onReqSuccess(String result, int flag) {
        //网络请求成功后，必须立即取消掉Loading弹框
        stopLoading();
        //将获取到的网络数据（json数据）转换为封装好的Model实体类
        NewTestModel entity = GsonUtils.json2Bean(result, NewTestModel.class);
        //清除掉以前的旧数据
        mListType.clear();
        //将Model实体类遍历以后赋给定义好的集合
        mListType.addAll(entity.getData().getCate_list());
        //循环出来六个Fragment添加到定义好的集合
        for (int i = 0; i < 6; i++) {
            //使用newInstance来创建对象,这样可以将六个标题赋给循环出来的六个Fragment
            NewsFragment fragment = NewsFragment.newInstance(mListType.get(i).getCate());
            mFragmentList.add(fragment);
        }
        //通知适配器数据更新，即刷新适配器
        mNewsAdapter.notifyDataSetChanged();
    }

    @Override
    public void onReqFailed(String errorMsg, int flag) {
        //网络请求失败后的操作
        Toast.makeText(getActivity(), "请检查您的网络", Toast.LENGTH_SHORT).show();
    }
}
